package usj.pop3.server.comandos;

import java.util.List;
import java.util.Scanner;

import usj.pop3.client.ScanFiles;
import usj.pop3.server.ComandoPop3;
import usj.pop3.server.Mensaje;
import usj.pop3.server.SesionCliente;

public class CmdTop implements ComandoPop3 {
	public static String MSG_OK = "+OK Top of message follows\r\n";
	public static String MSG_ERR = "-ERR message not found.";

    public String ejecutar(SesionCliente sesionCliente, String[] argumentos) {
    	String res = MSG_ERR;
    	if (sesionCliente.getEstado() == SesionCliente.Estados.AUTENTIFICADO) {
			if (argumentos.length > 2) {
	    		try {
					int numeroDeMensaje = Integer.parseInt(argumentos[1]);
					int numeroDeLineas = Integer.parseInt(argumentos[2]);
		    		ScanFiles scanFiles = new ScanFiles();
		    		List<Mensaje> mensajicos = scanFiles.listaMensajes(sesionCliente);
					if ((numeroDeMensaje > 0) && (numeroDeMensaje <= mensajicos.size())
							&& numeroDeLineas >= 0) {
						String cuerpoMensaje = mensajicos.get(numeroDeMensaje).getTexto();
						int i=0;
						Scanner scanner = new Scanner(cuerpoMensaje);
						res = MSG_OK + mensajicos.get(numeroDeMensaje).getTexto()
								+ "\r\n" + mensajicos.get(numeroDeMensaje).getSize() + "\r\n";
						while (scanner.hasNextLine() && i < numeroDeLineas) {
						  String linea = scanner.nextLine();
						  res += linea;
						  i++;
						}
						scanner.close();
			    		res += "\r\n.";
			    	}
	    		} catch (NumberFormatException e) {
					res = MSG_ERR;
				}
			}
    	}
    	return res;
    }
    public ComandoPop3 factory() {
		return new CmdTop();
    }
}
